/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.reports;

import com.losalpes.persistence.IPersistenceServices;
import com.losalpes.persistence.entity.Compra;
import com.losalpes.persistence.entity.ItemCompra;
import com.losalpes.persistence.entity.ReporteVentasCliente;
import com.losalpes.persistence.entity.ReporteVentasClienteItem;
import com.losalpes.persistence.entity.ReporteVentasDia;
import com.losalpes.persistence.entity.ReporteVentasDiaItem;
import com.losalpes.persistence.entity.ReporteVentasProducto;
import com.losalpes.persistence.entity.TipoMueble;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Alejandra
 */
@Stateless
@DeclareRoles({"gerente"})
public class Reportes implements IReportes{

    @EJB
    private IPersistenceServices persistenceServices;

    @RolesAllowed({"gerente"})
    public List<ReporteVentasProducto> ventasProducto(Date fecha1, Date fecha2){
       List<Compra> listaProds = persistenceServices.ventasProductoReporte(fecha1, fecha2);

       ArrayList<ReporteVentasProducto> listaReporte = new ArrayList<ReporteVentasProducto>();

       Iterator i = listaProds.iterator();

       while(i.hasNext()){
           Compra compra = (Compra)i.next();
           Iterator dc = compra.getItems().iterator();
           while(dc.hasNext()){
               ItemCompra itemCompra = (ItemCompra)dc.next();
               ReporteVentasProducto vcp;
               vcp = new ReporteVentasProducto(compra.getCliente().getCiudadResidencia(),itemCompra.getMueble().getTipo().toString(),itemCompra.getMueble().getNombre());
               listaReporte.add(vcp);
           }
       }

       return listaReporte;
    }

    @RolesAllowed({"gerente"})
    public List<ReporteVentasCliente> ventasCliente(Date fecha1, Date fecha2, String cliente){
       List<Compra> listaCompras = persistenceServices.ventasClienteReporte(fecha1, fecha2, cliente);

       ArrayList<ReporteVentasClienteItem> vcd = new ArrayList<ReporteVentasClienteItem>();
       ArrayList<ReporteVentasCliente> listaReporte = new ArrayList<ReporteVentasCliente>();


       Iterator i = listaCompras.iterator();

       while(i.hasNext()){
           Compra compra = (Compra)i.next();
           Iterator dc = compra.getItems().iterator();
           float totalCompra = (float)0;
           while(dc.hasNext()){
               ItemCompra itemCompra = (ItemCompra)dc.next();
               ReporteVentasClienteItem vci;
               totalCompra += (float) (itemCompra.getCantidad() * itemCompra.getPrecioUnitario());
               vci = new ReporteVentasClienteItem(itemCompra.getMueble().getNombre(),(float)itemCompra.getCantidad(), (float)itemCompra.getPrecioUnitario(), (float)itemCompra.getCantidad()*(float)itemCompra.getPrecioUnitario());
               vcd.add(vci);
           }
           ReporteVentasCliente vc;
           vc = new ReporteVentasCliente(compra.getCliente().getNombre(), compra.getFecha().toString(), totalCompra, compra.getFormaPago().name(), vcd, totalCompra);
           listaReporte.add(vc);
       }

      return listaReporte;
    }

    @RolesAllowed({"gerente"})
    public List<ReporteVentasDia> ventasDia(Date fecha1, Date fecha2, String ciudad){
       List<ItemCompra> listaCompras = persistenceServices.ventasDiaReporte(fecha1, fecha2, ciudad);

       ArrayList<ReporteVentasDiaItem> vdint = new ArrayList<ReporteVentasDiaItem>();
       ArrayList<ReporteVentasDiaItem> vdext = new ArrayList<ReporteVentasDiaItem>();

       ArrayList<ReporteVentasDia> listaReporte = new ArrayList<ReporteVentasDia>();

       ReporteVentasDiaItem vci;

       Iterator i = listaCompras.iterator();

       float totalCompra = (float)0;

       while(i.hasNext()){
           ItemCompra itemCompra = (ItemCompra)i.next();
       
           totalCompra += (float)(itemCompra.getCantidad() * itemCompra.getPrecioUnitario());

           if(itemCompra.getMueble().getTipo().equals(TipoMueble.Exterior)){
             vci = new ReporteVentasDiaItem(itemCompra.getMueble().getNombre(),(float)itemCompra.getCantidad(), (float)itemCompra.getPrecioUnitario(), (float)itemCompra.getCantidad()*(float)itemCompra.getPrecioUnitario());
             vdint.add(vci);  
           } 
           else{
             vci = new ReporteVentasDiaItem(itemCompra.getMueble().getNombre(),(float)itemCompra.getCantidad(), (float)itemCompra.getPrecioUnitario(), (float)itemCompra.getCantidad()*(float)itemCompra.getPrecioUnitario());
             vdext.add(vci);
           }  
       }

       ReporteVentasDia vc;
       vc = new ReporteVentasDia(TipoMueble.Interior.toString(), vdint, totalCompra);
       listaReporte.add(vc);
       vc = new ReporteVentasDia(TipoMueble.Exterior.toString(), vdext, totalCompra);
       listaReporte.add(vc);

      return listaReporte;
    }

    @RolesAllowed({"gerente"})
    public List productoMasVendido() {
        ReporteVentasProducto reporteVentasProducto = new ReporteVentasProducto();
        //reporteVentasProducto.set
        return this.persistenceServices.productoMasVendido();
    }

}
